﻿package hanoi {
	import flash.events.EventDispatcher;
	
	/**
	 * Evento iniciado antes de mover un disco.
	 * @eventType hanoi.HanoiEvent.DISC_MOVED
	 */
	[Event(name="discMoved", type="hanoi.HanoiEvent")]
	/**
	 * El juego de las torres de Hanoi.
	 */
	public final class Hanoi extends EventDispatcher {
		/**
		 * La cantidad de discos.
		 */
		private var _size:uint;
		/**
		 * La primer torre.
		 */
		private var _firstTower:Tower;
		/**
		 * La segunda torre.
		 */
		private var _secondTower:Tower;
		/**
		 * La tercer torre.
		 */
		private var _thirdTower:Tower;
		
		/**
		 * Constructor.
		 * @param size La cantidad de discos.
		 */
		public function Hanoi(size:uint):void {
			super();
			_size = size;
			_firstTower = new Tower(this, size);
			_secondTower = new Tower(this);
			_thirdTower = new Tower(this);
		}
		
		/**
		 * La cantidad de discos.
		 */
		public function get size():uint {
			return _size;
		}
		
		/**
		 * La primer torre.
		 */
		public function get firstTower():Tower {
			return _firstTower;
		}
		
		/**
		 * La segunda torre.
		 */
		public function get secondTower():Tower {
			return _secondTower;
		}
		
		/**
		 * La tercer torre.
		 */
		public function get thirdTower():Tower {
			return _thirdTower;
		}
		
		/**
		 * Representación textual del objeto.
		 */
		override public function toString():String {
			return "{Hanoi " + firstTower + " " + secondTower + " " + thirdTower + "}";
		}
	}
}
